using System;
using System.Collections.Generic;
using System.Text;
using Entidades;
using DataAccessArquitectura;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

/*
 * Nombre archivo: rg_fechas_registroBuilder.cs 
 *
 * Descripcion: Manipulacion de la tabla rg_fechas_registro, con los metodos de consulta, grabado, actulaizacion
 * y recuperacion de un registro
 *
 * Autor: PLUS-EW
 * Fecha: 27/08/2011 12:21:04
 *
 * Historial
 * ---------------------------------------------------------
 * Autor            Fecha               Modificación
 *
 */

namespace Reglas_Negocio
{
	public class rg_fechas_registroBuilder
	{
		private const enmTipoBaseDatos mTipoBD = enmTipoBaseDatos.MySQL;

		#region < METODOS PUBLICOS CONSULTA >
		public static DataTable ListarTodos()
		{
			try
			{
				return ListarTodos("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static DataTable ListarTodos(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("*", "rg_fechas_registro", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static bool Existe(string filtro)
		{
			int numero = 0;
			bool r = false;
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				numero = Convert.ToInt32(bd.EjecutarSelectScalar("COUNT(*)", "rg_fechas_registro", filtro));
				r = (numero > 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS GRABADO >
		public static bool GrabarViaProcedimiento(rg_fechas_registro datos)
		{
			int numero = 0;
			bool r = false;
			string filtro = "";
			try
			{
				string strConectionInsert = "INSERT INTO rg_fechas_registro ) VALUES );";
				string strConectionUpdate = "UPDATE rg_fechas_registro SET WHERE fecha_ent_sal=?fecha_ent_sal;";

				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				MySqlParameter psqlFecha_ent_sal = new MySqlParameter("?fecha_ent_sal", MySqlDbType.Datetime);

				psqlFecha_ent_sal.Value = datos.Fecha_ent_sal;

				if (!Existe("fecha_ent_sal=" + datos.Fecha_ent_sal))
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
							, psqlFecha_ent_sal
							);
					MessageBox.Show("Se grabo [rg_fechas_registro] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
							, psqlFecha_ent_sal
							);
					MessageBox.Show("Se actualizó [rg_fechas_registro] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				r = (numero < 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static void GrabarViaSql(rg_fechas_registro datos)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				string filtro = string.Format("fecha_ent_sal='{0}'", datos.Fecha_ent_sal);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("rg_fechas_registro"
						);
					MessageBox.Show("Se grabo [rg_fechas_registro] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("rg_fechas_registro", filtro
						);
					MessageBox.Show("Se actualizó [rg_fechas_registro] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS RECUPERACION >
		public static rg_fechas_registro Recuperar(string filtro)
		{
			rg_fechas_registro r = new rg_fechas_registro();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					if (ds.Rows[0]["fecha_ent_sal"] != System.DBNull.Value)
						r.Fecha_ent_sal = Convert.ToDateTime(ds.Rows[0]["fecha_ent_sal"]);
					if (ds.Rows[0]["fecha_ent_sal"] == System.DBNull.Value)
						r.Fecha_ent_sal = DateTime.Now;
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS BORRADO >
		public static void Borrar(string filtro)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				bd.EjecutarDelete("rg_fechas_registro", filtro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void BorrarTodos()
		{
			try
			{
				Borrar("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS EXTRAS >
		public static void Listar_Combobox(ComboBox cmbrg_fechas_registro, string filtro, string nombre_display)
		{
			cmbrg_fechas_registro.DataSource = ListarTodos(filtro);
			cmbrg_fechas_registro.DisplayMember = nombre_display;
			cmbrg_fechas_registro.ValueMember = "fecha_ent_sal";
		}

		public static DataTable ListarTodos_Alias(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("fecha_ent_sal AS fecha_ent_sal", "rg_fechas_registro", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static List<rg_fechas_registro> ListarTodos_List(string filtro)
		{
			List<rg_fechas_registro> r = new List<rg_fechas_registro>();
			try
			{
				DataTable dt = ListarTodos(filtro);
				for (int i = 0; i < dt.Rows.Count; i++)
					r.Add(Recuperar("fecha_ent_sal="+dt.Rows[i]["fecha_ent_sal"]));
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

		#region < METODOS PUBLICOS VALIDACION >
		public static rg_fechas_registro valida_campos_rg_fechas_registro(DateTime dpk_fecha_ent_sal)
		{
			bool r = true;
			rg_fechas_registro new_rg_fechas_registro = new rg_fechas_registro();
			try
			{
				if (r)
					new_rg_fechas_registro.Fecha_ent_sal = dpk_fecha_ent_sal;

				if(!r)
					new_rg_fechas_registro = null;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return new_rg_fechas_registro;
		}

		public static void grabar_actualizar_registro(DateTime dpk_fecha_ent_sal)
		{
			try
			{
				rg_fechas_registro new_rg_fechas_registro =valida_campos_rg_fechas_registro(dpk_fecha_ent_sal); 
				if(new_rg_fechas_registro!=null)
					GrabarViaSql(new_rg_fechas_registro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#endregion

	}
}
